package cn.shuto.liferay.plugin.chart.service.service.base;

import cn.shuto.liferay.plugin.chart.service.model.ChartTemplate;
import cn.shuto.liferay.plugin.chart.service.service.ChartTemplateLocalService;
import cn.shuto.liferay.plugin.chart.service.service.persistence.ChartTemplatePersistence;
import cn.shuto.liferay.plugin.chart.service.service.persistence.DataSourceCfgPersistence;
import cn.shuto.liferay.plugin.chart.service.service.persistence.OptionPersistence;

import com.liferay.portal.kernel.bean.BeanReference;
import com.liferay.portal.kernel.bean.IdentifiableBean;
import com.liferay.portal.kernel.dao.jdbc.SqlUpdate;
import com.liferay.portal.kernel.dao.jdbc.SqlUpdateFactoryUtil;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Projection;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.search.Indexable;
import com.liferay.portal.kernel.search.IndexableType;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.model.PersistedModel;
import com.liferay.portal.service.BaseLocalServiceImpl;
import com.liferay.portal.service.PersistedModelLocalServiceRegistryUtil;
import com.liferay.portal.service.persistence.UserPersistence;

import java.io.Serializable;

import java.util.List;

import javax.sql.DataSource;

/**
 * Provides the base implementation for the chart template local service.
 *
 * <p>
 * This implementation exists only as a container for the default service methods generated by ServiceBuilder. All custom service methods should be put in {@link cn.shuto.liferay.plugin.chart.service.service.impl.ChartTemplateLocalServiceImpl}.
 * </p>
 *
 * @author shixw
 * @see cn.shuto.liferay.plugin.chart.service.service.impl.ChartTemplateLocalServiceImpl
 * @see cn.shuto.liferay.plugin.chart.service.service.ChartTemplateLocalServiceUtil
 * @generated
 */
public abstract class ChartTemplateLocalServiceBaseImpl
    extends BaseLocalServiceImpl implements ChartTemplateLocalService,
        IdentifiableBean {
    @BeanReference(type = cn.shuto.liferay.plugin.chart.service.service.ChartTemplateLocalService.class)
    protected cn.shuto.liferay.plugin.chart.service.service.ChartTemplateLocalService chartTemplateLocalService;
    @BeanReference(type = cn.shuto.liferay.plugin.chart.service.service.ChartTemplateService.class)
    protected cn.shuto.liferay.plugin.chart.service.service.ChartTemplateService chartTemplateService;
    @BeanReference(type = ChartTemplatePersistence.class)
    protected ChartTemplatePersistence chartTemplatePersistence;
    @BeanReference(type = cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgLocalService.class)
    protected cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgLocalService dataSourceCfgLocalService;
    @BeanReference(type = cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgService.class)
    protected cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgService dataSourceCfgService;
    @BeanReference(type = DataSourceCfgPersistence.class)
    protected DataSourceCfgPersistence dataSourceCfgPersistence;
    @BeanReference(type = cn.shuto.liferay.plugin.chart.service.service.OptionLocalService.class)
    protected cn.shuto.liferay.plugin.chart.service.service.OptionLocalService optionLocalService;
    @BeanReference(type = OptionPersistence.class)
    protected OptionPersistence optionPersistence;
    @BeanReference(type = com.liferay.counter.service.CounterLocalService.class)
    protected com.liferay.counter.service.CounterLocalService counterLocalService;
    @BeanReference(type = com.liferay.portal.service.ResourceLocalService.class)
    protected com.liferay.portal.service.ResourceLocalService resourceLocalService;
    @BeanReference(type = com.liferay.portal.service.UserLocalService.class)
    protected com.liferay.portal.service.UserLocalService userLocalService;
    @BeanReference(type = com.liferay.portal.service.UserService.class)
    protected com.liferay.portal.service.UserService userService;
    @BeanReference(type = UserPersistence.class)
    protected UserPersistence userPersistence;
    private String _beanIdentifier;
    private ClassLoader _classLoader;
    private ChartTemplateLocalServiceClpInvoker _clpInvoker = new ChartTemplateLocalServiceClpInvoker();

    /*
     * NOTE FOR DEVELOPERS:
     *
     * Never modify or reference this class directly. Always use {@link cn.shuto.liferay.plugin.chart.service.service.ChartTemplateLocalServiceUtil} to access the chart template local service.
     */

    /**
     * Adds the chart template to the database. Also notifies the appropriate model listeners.
     *
     * @param chartTemplate the chart template
     * @return the chart template that was added
     * @throws SystemException if a system exception occurred
     */
    @Indexable(type = IndexableType.REINDEX)
    @Override
    public ChartTemplate addChartTemplate(ChartTemplate chartTemplate)
        throws SystemException {
        chartTemplate.setNew(true);

        return chartTemplatePersistence.update(chartTemplate);
    }

    /**
     * Creates a new chart template with the primary key. Does not add the chart template to the database.
     *
     * @param chartTemplateId the primary key for the new chart template
     * @return the new chart template
     */
    @Override
    public ChartTemplate createChartTemplate(long chartTemplateId) {
        return chartTemplatePersistence.create(chartTemplateId);
    }

    /**
     * Deletes the chart template with the primary key from the database. Also notifies the appropriate model listeners.
     *
     * @param chartTemplateId the primary key of the chart template
     * @return the chart template that was removed
     * @throws PortalException if a chart template with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Indexable(type = IndexableType.DELETE)
    @Override
    public ChartTemplate deleteChartTemplate(long chartTemplateId)
        throws PortalException, SystemException {
        return chartTemplatePersistence.remove(chartTemplateId);
    }

    /**
     * Deletes the chart template from the database. Also notifies the appropriate model listeners.
     *
     * @param chartTemplate the chart template
     * @return the chart template that was removed
     * @throws SystemException if a system exception occurred
     */
    @Indexable(type = IndexableType.DELETE)
    @Override
    public ChartTemplate deleteChartTemplate(ChartTemplate chartTemplate)
        throws SystemException {
        return chartTemplatePersistence.remove(chartTemplate);
    }

    @Override
    public DynamicQuery dynamicQuery() {
        Class<?> clazz = getClass();

        return DynamicQueryFactoryUtil.forClass(ChartTemplate.class,
            clazz.getClassLoader());
    }

    /**
     * Performs a dynamic query on the database and returns the matching rows.
     *
     * @param dynamicQuery the dynamic query
     * @return the matching rows
     * @throws SystemException if a system exception occurred
     */
    @Override
    @SuppressWarnings("rawtypes")
    public List dynamicQuery(DynamicQuery dynamicQuery)
        throws SystemException {
        return chartTemplatePersistence.findWithDynamicQuery(dynamicQuery);
    }

    /**
     * Performs a dynamic query on the database and returns a range of the matching rows.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link cn.shuto.liferay.plugin.chart.service.model.impl.ChartTemplateModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param dynamicQuery the dynamic query
     * @param start the lower bound of the range of model instances
     * @param end the upper bound of the range of model instances (not inclusive)
     * @return the range of matching rows
     * @throws SystemException if a system exception occurred
     */
    @Override
    @SuppressWarnings("rawtypes")
    public List dynamicQuery(DynamicQuery dynamicQuery, int start, int end)
        throws SystemException {
        return chartTemplatePersistence.findWithDynamicQuery(dynamicQuery,
            start, end);
    }

    /**
     * Performs a dynamic query on the database and returns an ordered range of the matching rows.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link cn.shuto.liferay.plugin.chart.service.model.impl.ChartTemplateModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param dynamicQuery the dynamic query
     * @param start the lower bound of the range of model instances
     * @param end the upper bound of the range of model instances (not inclusive)
     * @param orderByComparator the comparator to order the results by (optionally <code>null</code>)
     * @return the ordered range of matching rows
     * @throws SystemException if a system exception occurred
     */
    @Override
    @SuppressWarnings("rawtypes")
    public List dynamicQuery(DynamicQuery dynamicQuery, int start, int end,
        OrderByComparator orderByComparator) throws SystemException {
        return chartTemplatePersistence.findWithDynamicQuery(dynamicQuery,
            start, end, orderByComparator);
    }

    /**
     * Returns the number of rows that match the dynamic query.
     *
     * @param dynamicQuery the dynamic query
     * @return the number of rows that match the dynamic query
     * @throws SystemException if a system exception occurred
     */
    @Override
    public long dynamicQueryCount(DynamicQuery dynamicQuery)
        throws SystemException {
        return chartTemplatePersistence.countWithDynamicQuery(dynamicQuery);
    }

    /**
     * Returns the number of rows that match the dynamic query.
     *
     * @param dynamicQuery the dynamic query
     * @param projection the projection to apply to the query
     * @return the number of rows that match the dynamic query
     * @throws SystemException if a system exception occurred
     */
    @Override
    public long dynamicQueryCount(DynamicQuery dynamicQuery,
        Projection projection) throws SystemException {
        return chartTemplatePersistence.countWithDynamicQuery(dynamicQuery,
            projection);
    }

    @Override
    public ChartTemplate fetchChartTemplate(long chartTemplateId)
        throws SystemException {
        return chartTemplatePersistence.fetchByPrimaryKey(chartTemplateId);
    }

    /**
     * Returns the chart template with the matching UUID and company.
     *
     * @param uuid the chart template's UUID
     * @param  companyId the primary key of the company
     * @return the matching chart template, or <code>null</code> if a matching chart template could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ChartTemplate fetchChartTemplateByUuidAndCompanyId(String uuid,
        long companyId) throws SystemException {
        return chartTemplatePersistence.fetchByUuid_C_First(uuid, companyId,
            null);
    }

    /**
     * Returns the chart template matching the UUID and group.
     *
     * @param uuid the chart template's UUID
     * @param groupId the primary key of the group
     * @return the matching chart template, or <code>null</code> if a matching chart template could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ChartTemplate fetchChartTemplateByUuidAndGroupId(String uuid,
        long groupId) throws SystemException {
        return chartTemplatePersistence.fetchByUUID_G(uuid, groupId);
    }

    /**
     * Returns the chart template with the primary key.
     *
     * @param chartTemplateId the primary key of the chart template
     * @return the chart template
     * @throws PortalException if a chart template with the primary key could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ChartTemplate getChartTemplate(long chartTemplateId)
        throws PortalException, SystemException {
        return chartTemplatePersistence.findByPrimaryKey(chartTemplateId);
    }

    @Override
    public PersistedModel getPersistedModel(Serializable primaryKeyObj)
        throws PortalException, SystemException {
        return chartTemplatePersistence.findByPrimaryKey(primaryKeyObj);
    }

    /**
     * Returns the chart template with the matching UUID and company.
     *
     * @param uuid the chart template's UUID
     * @param  companyId the primary key of the company
     * @return the matching chart template
     * @throws PortalException if a matching chart template could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ChartTemplate getChartTemplateByUuidAndCompanyId(String uuid,
        long companyId) throws PortalException, SystemException {
        return chartTemplatePersistence.findByUuid_C_First(uuid, companyId, null);
    }

    /**
     * Returns the chart template matching the UUID and group.
     *
     * @param uuid the chart template's UUID
     * @param groupId the primary key of the group
     * @return the matching chart template
     * @throws PortalException if a matching chart template could not be found
     * @throws SystemException if a system exception occurred
     */
    @Override
    public ChartTemplate getChartTemplateByUuidAndGroupId(String uuid,
        long groupId) throws PortalException, SystemException {
        return chartTemplatePersistence.findByUUID_G(uuid, groupId);
    }

    /**
     * Returns a range of all the chart templates.
     *
     * <p>
     * Useful when paginating results. Returns a maximum of <code>end - start</code> instances. <code>start</code> and <code>end</code> are not primary keys, they are indexes in the result set. Thus, <code>0</code> refers to the first result in the set. Setting both <code>start</code> and <code>end</code> to {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS} will return the full result set. If <code>orderByComparator</code> is specified, then the query will include the given ORDER BY logic. If <code>orderByComparator</code> is absent and pagination is required (<code>start</code> and <code>end</code> are not {@link com.liferay.portal.kernel.dao.orm.QueryUtil#ALL_POS}), then the query will include the default ORDER BY logic from {@link cn.shuto.liferay.plugin.chart.service.model.impl.ChartTemplateModelImpl}. If both <code>orderByComparator</code> and pagination are absent, for performance reasons, the query will not have an ORDER BY clause and the returned result set will be sorted on by the primary key in an ascending order.
     * </p>
     *
     * @param start the lower bound of the range of chart templates
     * @param end the upper bound of the range of chart templates (not inclusive)
     * @return the range of chart templates
     * @throws SystemException if a system exception occurred
     */
    @Override
    public List<ChartTemplate> getChartTemplates(int start, int end)
        throws SystemException {
        return chartTemplatePersistence.findAll(start, end);
    }

    /**
     * Returns the number of chart templates.
     *
     * @return the number of chart templates
     * @throws SystemException if a system exception occurred
     */
    @Override
    public int getChartTemplatesCount() throws SystemException {
        return chartTemplatePersistence.countAll();
    }

    /**
     * Updates the chart template in the database or adds it if it does not yet exist. Also notifies the appropriate model listeners.
     *
     * @param chartTemplate the chart template
     * @return the chart template that was updated
     * @throws SystemException if a system exception occurred
     */
    @Indexable(type = IndexableType.REINDEX)
    @Override
    public ChartTemplate updateChartTemplate(ChartTemplate chartTemplate)
        throws SystemException {
        return chartTemplatePersistence.update(chartTemplate);
    }

    /**
     * Returns the chart template local service.
     *
     * @return the chart template local service
     */
    public cn.shuto.liferay.plugin.chart.service.service.ChartTemplateLocalService getChartTemplateLocalService() {
        return chartTemplateLocalService;
    }

    /**
     * Sets the chart template local service.
     *
     * @param chartTemplateLocalService the chart template local service
     */
    public void setChartTemplateLocalService(
        cn.shuto.liferay.plugin.chart.service.service.ChartTemplateLocalService chartTemplateLocalService) {
        this.chartTemplateLocalService = chartTemplateLocalService;
    }

    /**
     * Returns the chart template remote service.
     *
     * @return the chart template remote service
     */
    public cn.shuto.liferay.plugin.chart.service.service.ChartTemplateService getChartTemplateService() {
        return chartTemplateService;
    }

    /**
     * Sets the chart template remote service.
     *
     * @param chartTemplateService the chart template remote service
     */
    public void setChartTemplateService(
        cn.shuto.liferay.plugin.chart.service.service.ChartTemplateService chartTemplateService) {
        this.chartTemplateService = chartTemplateService;
    }

    /**
     * Returns the chart template persistence.
     *
     * @return the chart template persistence
     */
    public ChartTemplatePersistence getChartTemplatePersistence() {
        return chartTemplatePersistence;
    }

    /**
     * Sets the chart template persistence.
     *
     * @param chartTemplatePersistence the chart template persistence
     */
    public void setChartTemplatePersistence(
        ChartTemplatePersistence chartTemplatePersistence) {
        this.chartTemplatePersistence = chartTemplatePersistence;
    }

    /**
     * Returns the data source cfg local service.
     *
     * @return the data source cfg local service
     */
    public cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgLocalService getDataSourceCfgLocalService() {
        return dataSourceCfgLocalService;
    }

    /**
     * Sets the data source cfg local service.
     *
     * @param dataSourceCfgLocalService the data source cfg local service
     */
    public void setDataSourceCfgLocalService(
        cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgLocalService dataSourceCfgLocalService) {
        this.dataSourceCfgLocalService = dataSourceCfgLocalService;
    }

    /**
     * Returns the data source cfg remote service.
     *
     * @return the data source cfg remote service
     */
    public cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgService getDataSourceCfgService() {
        return dataSourceCfgService;
    }

    /**
     * Sets the data source cfg remote service.
     *
     * @param dataSourceCfgService the data source cfg remote service
     */
    public void setDataSourceCfgService(
        cn.shuto.liferay.plugin.chart.service.service.DataSourceCfgService dataSourceCfgService) {
        this.dataSourceCfgService = dataSourceCfgService;
    }

    /**
     * Returns the data source cfg persistence.
     *
     * @return the data source cfg persistence
     */
    public DataSourceCfgPersistence getDataSourceCfgPersistence() {
        return dataSourceCfgPersistence;
    }

    /**
     * Sets the data source cfg persistence.
     *
     * @param dataSourceCfgPersistence the data source cfg persistence
     */
    public void setDataSourceCfgPersistence(
        DataSourceCfgPersistence dataSourceCfgPersistence) {
        this.dataSourceCfgPersistence = dataSourceCfgPersistence;
    }

    /**
     * Returns the option local service.
     *
     * @return the option local service
     */
    public cn.shuto.liferay.plugin.chart.service.service.OptionLocalService getOptionLocalService() {
        return optionLocalService;
    }

    /**
     * Sets the option local service.
     *
     * @param optionLocalService the option local service
     */
    public void setOptionLocalService(
        cn.shuto.liferay.plugin.chart.service.service.OptionLocalService optionLocalService) {
        this.optionLocalService = optionLocalService;
    }

    /**
     * Returns the option persistence.
     *
     * @return the option persistence
     */
    public OptionPersistence getOptionPersistence() {
        return optionPersistence;
    }

    /**
     * Sets the option persistence.
     *
     * @param optionPersistence the option persistence
     */
    public void setOptionPersistence(OptionPersistence optionPersistence) {
        this.optionPersistence = optionPersistence;
    }

    /**
     * Returns the counter local service.
     *
     * @return the counter local service
     */
    public com.liferay.counter.service.CounterLocalService getCounterLocalService() {
        return counterLocalService;
    }

    /**
     * Sets the counter local service.
     *
     * @param counterLocalService the counter local service
     */
    public void setCounterLocalService(
        com.liferay.counter.service.CounterLocalService counterLocalService) {
        this.counterLocalService = counterLocalService;
    }

    /**
     * Returns the resource local service.
     *
     * @return the resource local service
     */
    public com.liferay.portal.service.ResourceLocalService getResourceLocalService() {
        return resourceLocalService;
    }

    /**
     * Sets the resource local service.
     *
     * @param resourceLocalService the resource local service
     */
    public void setResourceLocalService(
        com.liferay.portal.service.ResourceLocalService resourceLocalService) {
        this.resourceLocalService = resourceLocalService;
    }

    /**
     * Returns the user local service.
     *
     * @return the user local service
     */
    public com.liferay.portal.service.UserLocalService getUserLocalService() {
        return userLocalService;
    }

    /**
     * Sets the user local service.
     *
     * @param userLocalService the user local service
     */
    public void setUserLocalService(
        com.liferay.portal.service.UserLocalService userLocalService) {
        this.userLocalService = userLocalService;
    }

    /**
     * Returns the user remote service.
     *
     * @return the user remote service
     */
    public com.liferay.portal.service.UserService getUserService() {
        return userService;
    }

    /**
     * Sets the user remote service.
     *
     * @param userService the user remote service
     */
    public void setUserService(
        com.liferay.portal.service.UserService userService) {
        this.userService = userService;
    }

    /**
     * Returns the user persistence.
     *
     * @return the user persistence
     */
    public UserPersistence getUserPersistence() {
        return userPersistence;
    }

    /**
     * Sets the user persistence.
     *
     * @param userPersistence the user persistence
     */
    public void setUserPersistence(UserPersistence userPersistence) {
        this.userPersistence = userPersistence;
    }

    public void afterPropertiesSet() {
        Class<?> clazz = getClass();

        _classLoader = clazz.getClassLoader();

        PersistedModelLocalServiceRegistryUtil.register("cn.shuto.liferay.plugin.chart.service.model.ChartTemplate",
            chartTemplateLocalService);
    }

    public void destroy() {
        PersistedModelLocalServiceRegistryUtil.unregister(
            "cn.shuto.liferay.plugin.chart.service.model.ChartTemplate");
    }

    /**
     * Returns the Spring bean ID for this bean.
     *
     * @return the Spring bean ID for this bean
     */
    @Override
    public String getBeanIdentifier() {
        return _beanIdentifier;
    }

    /**
     * Sets the Spring bean ID for this bean.
     *
     * @param beanIdentifier the Spring bean ID for this bean
     */
    @Override
    public void setBeanIdentifier(String beanIdentifier) {
        _beanIdentifier = beanIdentifier;
    }

    @Override
    public Object invokeMethod(String name, String[] parameterTypes,
        Object[] arguments) throws Throwable {
        Thread currentThread = Thread.currentThread();

        ClassLoader contextClassLoader = currentThread.getContextClassLoader();

        if (contextClassLoader != _classLoader) {
            currentThread.setContextClassLoader(_classLoader);
        }

        try {
            return _clpInvoker.invokeMethod(name, parameterTypes, arguments);
        } finally {
            if (contextClassLoader != _classLoader) {
                currentThread.setContextClassLoader(contextClassLoader);
            }
        }
    }

    protected Class<?> getModelClass() {
        return ChartTemplate.class;
    }

    protected String getModelClassName() {
        return ChartTemplate.class.getName();
    }

    /**
     * Performs an SQL query.
     *
     * @param sql the sql query
     */
    protected void runSQL(String sql) throws SystemException {
        try {
            DataSource dataSource = chartTemplatePersistence.getDataSource();

            SqlUpdate sqlUpdate = SqlUpdateFactoryUtil.getSqlUpdate(dataSource,
                    sql, new int[0]);

            sqlUpdate.update();
        } catch (Exception e) {
            throw new SystemException(e);
        }
    }
}
